package com.epadmin.finanse.dochody;

import java.math.BigDecimal;
import java.util.Date;

import com.ep.general.ActionSupportCustom;
import com.ep.general.admin.Administrator;
import com.epadmin.app.login.LoginRequierd;

public class DochodAction extends ActionSupportCustom<Administrator> implements LoginRequierd {

	private static final long serialVersionUID = 7626112204181918328L;
	private final String DOCHOD_KEY = "dochodItem";
	private DochodForm form;
	private int dochodId;
	private DochodMdt dochodMdt;

	@Override
	public String execute() throws Exception {
		return SUCCESS;
	}

	public String list() {
		setDataArray(new DochodView().getData());
		return DATA_ARRAY;
	}
	
	public String listGrouppedByMonth() {
		setDataArray(new DochodView().getGroupByMonthData());
		return DATA_ARRAY;
	}

	public String add() {
		getForm().setNazwa("");
		getForm().setKwota(BigDecimal.ZERO);
		getForm().setDate(new Date());

		getSession().remove(DOCHOD_KEY);
		getSession().put(DOCHOD_KEY, getForm());

		return EDIT;
	}

	public String edit() {
		getSession().remove(DOCHOD_KEY);
		Dochod dochod = getDochodMdt().get(getDochodId());

		if (dochod == null) {
			setText("Brak dochodu");
			return TEXT_RESULT;
		}
		getForm().setData(dochod);
		getSession().put(DOCHOD_KEY, getForm());

		return EDIT;
	}

	public String delete() {
		Dochod dochod = getDochodMdt().get(getDochodId());

		if (dochod == null) {
			setText("Brak dochodu");
			return TEXT_RESULT;
		}

		getDochodMdt().delete(dochod);

		setText("Dochód został poprawnie usunięty");
		return TEXT_RESULT;
	}

	public String save() {
		Dochod dochodEdytowany = ((DochodForm) getSession().get(DOCHOD_KEY)).getData();
		Dochod dochodNowy = getForm().getData();

		if (dochodEdytowany == null) {
			setText("Brak dochodu !");
			return TEXT_RESULT;
		}

		if (!isValid(getForm().getData())) {
			return TEXT_RESULT;
		}

		if (!dochodEdytowany.compareAndCopy(dochodNowy)) {
			setText("Brak zmian po edycji !");
			return TEXT_RESULT;
		}

		getDochodMdt().makePersistent(dochodEdytowany);
		getSession().remove(DOCHOD_KEY);

		setText("Dochód został poprawnie zmieniony");
		return TEXT_RESULT;
	}

	public String saveNew() {
		if (getForm().getData() == null) {
			setText("Brak dochodu");
			return TEXT_RESULT;
		}

		if (!isValid(getForm().getData())) {
			return TEXT_RESULT;
		}

		getDochodMdt().makePersistent(getForm().getData());

		getSession().remove(DOCHOD_KEY);
		setText("Nowy dochód został poprawnie dodany");

		return TEXT_RESULT;
	}

	private boolean isValid(Dochod item) {
		if (item.getNazwa().length() < 5) {
			setText("Wymagana długość nazwy dochodu to pięć znaków !");
			return false;
		}
		return true;
	}

	public DochodForm getForm() {
		if (form == null)
			form = new DochodForm();
		return form;
	}

	public void setForm(DochodForm form) {
		this.form = form;
	}

	public int getDochodId() {
		return dochodId;
	}

	public void setDochodId(int dochodId) {
		this.dochodId = dochodId;
	}

	private DochodMdt getDochodMdt() {
		if (dochodMdt == null)
			dochodMdt = new DochodMdt();
		return dochodMdt;
	}

}
